Skip to content

chore(renovate): retire maint-51 in favor of pip-compile lockFileMaintenance - #2413

Merged
stranske merged 1 commit into
mainfrom
chore/retire-maint-51-lockfile-maintenance
Jun 15, 2026
Merged

chore(renovate): retire maint-51 in favor of pip-compile lockFileMaintenance#2413
stranske merged 1 commit into
mainfrom
chore/retire-maint-51-lockfile-maintenance

Conversation

@stranske

@stranske stranske commented Jun 15, 2026

Copy link
Copy Markdown
Owner

What & why

maint-51-dependency-refresh.yml ran uv pip compile --upgrade ... -o requirements.lock on a schedule (1st & 15th) to refresh the lock. Renovate's pip-compile manager is now enabled on requirements.lock (canary renovate.json #2411 + fleet preset #2406), so this is a duplicate refresher — and maint-51 had been failing every scheduled run since ~March (unsatisfiable pytest pin, fixed in #2404). Retire it in favor of the manager's lockFileMaintenance.

Verification of the --upgrade-in-header concern (the original worry)

The follow-up note in #2411 worried that maint-51's --upgrade would land in the committed lock header and either break Renovate's parser or mis-direct it into a mass upgrade. Both turn out not to be real, verified two ways:

  1. uv omits --upgrade from the lock header. Compiling the exact maint-51 command with and without --upgrade produces byte-identical headers (uv 0.10.3): --upgrade is a one-time action flag, not part of the reproducible recorded command.
  2. Renovate's pip-compile header parser (lib/modules/manager/pip-compile/common.ts): --upgrade/-U is not in the uv allowlist, and throwForUnknownOption would throw "Option --upgrade not supported (yet)" — i.e. it would skip managing the lock, never silently re-run a mass --upgrade. Per-dep bumps are scoped with --upgrade-package=<dep>==<ver> (artifacts.ts), so a mass upgrade is structurally impossible.

So the acute risk is a non-issue; this PR is the cleanup (eliminate the duplicate, long-broken refresher).

Why lockFileMaintenance is the right replacement

lib/modules/manager/pip-compile/index.ts:

export const supportsLockFileMaintenance = true;
export const defaultConfig = {
  managerFilePatterns: [],
  lockFileMaintenance: { enabled: true, branchTopic: 'pip-compile-refresh',
                         commitMessageAction: 'Refresh pip-compile outputs' },
};

The manager enables lockFileMaintenance by default (overriding Renovate's global enabled:false). On schedule it deletes the lock and recompiles from scratch (artifacts.ts isLockFileMaintenance branch) = the --upgrade equivalent, respecting source pins. No config change is needed — it's already live (weekly, default schedule).

maint-51's other steps are covered elsewhere

  • scripts/sync_test_dependencies.py --verify → already runs in reusable-10-ci-python.yml on every PR.
  • dev-tool pin alignment (sync_tool_versions --check) → enforced on schedule by maint-auto-update-pypi-versions.yml + maint-sync-env-from-pyproject.yml (--apply); maint-51's --check was a redundant defensive assertion.
  • in-PR lock regen backstop → maint-dependabot-auto-lock.yml (renovate-aware).

Changes

  • delete .github/workflows/maint-51-dependency-refresh.yml
  • drop its EXPECTED_NAMES entry in tests/workflows/test_workflow_naming.py
  • remove it from docs/ci/WORKFLOWS.md (required by the doc-link guard), docs/ci/WORKFLOW_SYSTEM.md, docs/WORKFLOW_GUIDE.md, DEPENDENCY_TESTING.md
  • document lockFileMaintenance ownership in renovate.json (so a scheduled refresher isn't reintroduced)

Historical/dated docs (audits, transition plans, dated reviews) are left as point-in-time records.

Tests

tests/workflows/685 passed, 3 skipped locally (naming, inventory-parity, and doc-link-resolve guards all green). renovate.json validates as JSON.

Follow-ups (out of scope — fleet promotion, per #2411)

  • Consumer template templates/dependency-refresh.yml + its mention in templates/consumer-repo/WORKFLOW_USER_GUIDE.md should be retired when the pip-compile block is promoted into renovate-presets/fleet.json and maint-69 is updated.
  • Counter_Risk is the last repo still on Dependabot (blocked on its golden-CSV CI).

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Chores
    • Removed the scheduled dependency refresh workflow; dependency management is now handled through Renovate's pip-compile functionality.
    • Updated documentation and configuration references to reflect the simplified maintenance process.

…tenance

Renovate's pip-compile manager (enabled on requirements.lock via the canary
renovate.json #2411 + fleet preset #2406) already owns periodic lock
regeneration: supportsLockFileMaintenance=true and its defaultConfig enables
lockFileMaintenance by default (branchTopic `pip-compile-refresh`), recompiling
the lock from scratch on a schedule. That makes maint-51-dependency-refresh.yml's
scheduled `uv pip compile --upgrade` a duplicate refresher (and it had failed
every run since ~March until #2404). Retire it.

Verified the feared `--upgrade`-in-header risk does NOT exist:
- uv omits `--upgrade` from the recorded lock header (empirically: compiles with
  and without `--upgrade` produce byte-identical headers).
- Even if it appeared, Renovate's pip-compile header parser (common.ts
  throwForUnknownOption) would throw `Option --upgrade not supported (yet)` and
  skip the file; it never re-runs a mass `--upgrade` (per-dep bumps are scoped
  via `--upgrade-package` in artifacts.ts).

maint-51's other steps remain covered: sync_test_dependencies.py --verify runs in
reusable-10-ci-python on every PR; dev-tool pin alignment is enforced on schedule
by maint-auto-update-pypi-versions + maint-sync-env-from-pyproject (--apply).

- delete .github/workflows/maint-51-dependency-refresh.yml
- drop its EXPECTED_NAMES entry in tests/workflows/test_workflow_naming.py
- remove it from docs/ci/WORKFLOWS.md (link guard), WORKFLOW_SYSTEM.md,
  WORKFLOW_GUIDE.md, DEPENDENCY_TESTING.md; document lockFileMaintenance
  ownership in renovate.json

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 15, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 838b1f54-0cc1-43e9-b0b7-2fc4c60092b5

📥 Commits

Reviewing files that changed from the base of the PR and between 2ff3f3d and 16d0063.

📒 Files selected for processing (7)
  • .github/workflows/maint-51-dependency-refresh.yml
  • DEPENDENCY_TESTING.md
  • docs/WORKFLOW_GUIDE.md
  • docs/ci/WORKFLOWS.md
  • docs/ci/WORKFLOW_SYSTEM.md
  • renovate.json
  • tests/workflows/test_workflow_naming.py
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • stranske/Template (auto-detected)
💤 Files with no reviewable changes (3)
  • docs/ci/WORKFLOWS.md
  • tests/workflows/test_workflow_naming.py
  • .github/workflows/maint-51-dependency-refresh.yml

📝 Walkthrough

Walkthrough

Removes the maint-51-dependency-refresh.yml scheduled GitHub Actions workflow (184 lines) and updates renovate.json, DEPENDENCY_TESTING.md, tests/workflows/test_workflow_naming.py, and four documentation files to reflect that Renovate's lockFileMaintenance now owns requirements.lock regeneration.

Changes

Retire maint-51-dependency-refresh workflow

Layer / File(s) Summary
Lock ownership transfer to Renovate and test cleanup
renovate.json, DEPENDENCY_TESTING.md, tests/workflows/test_workflow_naming.py
renovate.json description is extended with pip-compile lock ownership details and a warning against reintroducing the retired scheduled workflow. DEPENDENCY_TESTING.md replaces the maint-51 reference with Renovate lockFileMaintenance/pip-compile-refresh behavior. EXPECTED_NAMES in the naming test drops the maint-51-dependency-refresh.yml entry.
Documentation reference removal
docs/WORKFLOW_GUIDE.md, docs/ci/WORKFLOWS.md, docs/ci/WORKFLOW_SYSTEM.md
Removes maint-51-dependency-refresh.yml from the WFv1 active examples list, final workflow set roster, CI catalog bullet, bucket quick reference, topology table, canonical workflows section, workflow summary table, and keep/retire list. Maint 50 Tool Version Check is substituted where Maint 51 previously appeared in the maintenance bucket descriptions.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

  • stranske/Workflows#2385: Introduced Renovate config while preserving maint-51-dependency-refresh; this PR is the direct follow-up that retires it after Renovate's lockFileMaintenance takes over.
  • stranske/Workflows#2406: Updated the auto-lock workflow and enabled the pip-compile fleet preset to re-run the header-recorded uv pip compile command, establishing the Renovate backstop that makes maint-51 redundant.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately and concisely summarizes the main change: retiring the maint-51 workflow in favor of Renovate's pip-compile lockFileMaintenance feature.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/retire-maint-51-lockfile-maintenance

Comment @coderabbitai help to get the list of available commands and usage tips.

@stranske
stranske temporarily deployed to agent-high-privilege June 15, 2026 06:36 — with GitHub Actions Inactive
@agents-workflows-bot

Copy link
Copy Markdown
Contributor

Workflow source needed

PR #2413 needs either a linked GitHub issue or one valid non-issue Workflow Source before PR metadata automation can manage it safely.

Please do one of:

  • Add <!-- meta:issue:123 --> or a normal Closes #123 / Related to #123 line.
  • Check one Workflow Source option in the PR body.
  • Add a hidden marker such as <!-- workflow-source:local_request -->, <!-- workflow-source:manual_remote -->, <!-- workflow-source:review_followup -->, <!-- workflow-source:sync_campaign -->, or <!-- workflow-source:dependabot -->.
  • Add a workflow source label such as workflow:source-direct-pr, workflow:source-local-request, workflow:source-review-followup, workflow:source-sync, or workflow:no-automation.

Once a valid source is present, this warning will not be reposted.

@agents-workflows-bot

Copy link
Copy Markdown
Contributor

Automated Status Summary

Head SHA: 206e349
Latest Runs: ⏳ pending — Gate
Required contexts: Gate / gate, Health 45 Agents Guard / guard
Required: core tests (3.12): ⏳ pending, core tests (3.13): ⏳ pending, docker smoke: ⏳ pending, gate: ⏳ pending

Workflow / Job Result Logs
(no jobs reported) ⏳ pending

Coverage Overview

  • Coverage history entries: 1

Coverage Trend

Metric Value
Current 70.26%
Baseline 85.00%
Delta -14.74%
Minimum 70.00%
Status ✅ Pass

Top Coverage Hotspots (lowest coverage)

File Coverage Missing
scripts/check_api_wrapper_guard.py 0.0% 123
scripts/cleanup_labels.py 0.0% 127
scripts/issue_dedup_smoke.py 0.0% 4
scripts/list_registered_consumer_repos.py 0.0% 33
scripts/repo_review_backlog_scan.py 0.0% 203
scripts/repo_review_queue_builder.py 0.0% 105
scripts/repo_review_round1_runner.py 0.0% 225
scripts/repo_review_round1_schema.py 0.0% 194
scripts/runner_lib/__main__.py 0.0% 3
scripts/update_langchain_versions.py 0.0% 34
scripts/validate_dependency_test_setup.py 0.0% 112
scripts/validate_template_completeness.py 0.0% 88
scripts/validate_template_sync.py 0.0% 77
scripts/validate_workflow_yaml.py 0.0% 98
scripts/repo_review_round2_schema.py 8.8% 185

Low Coverage Files (<50.0%)

File Coverage Missing
scripts/check_api_wrapper_guard.py 0.0% 123
scripts/cleanup_labels.py 0.0% 127
scripts/issue_dedup_smoke.py 0.0% 4
scripts/list_registered_consumer_repos.py 0.0% 33
scripts/repo_review_backlog_scan.py 0.0% 203
scripts/repo_review_queue_builder.py 0.0% 105
scripts/repo_review_round1_runner.py 0.0% 225
scripts/repo_review_round1_schema.py 0.0% 194
scripts/runner_lib/__main__.py 0.0% 3
scripts/update_langchain_versions.py 0.0% 34
scripts/validate_dependency_test_setup.py 0.0% 112
scripts/validate_template_completeness.py 0.0% 88
scripts/validate_template_sync.py 0.0% 77
scripts/validate_workflow_yaml.py 0.0% 98
scripts/repo_review_round2_schema.py 8.8% 185

Updated automatically; will refresh on subsequent CI/Docker completions.


Keepalive checklist

Scope

No scope information available

Tasks

  • No tasks defined

Acceptance criteria

  • No acceptance criteria defined

@stranske

Copy link
Copy Markdown
Owner Author

Coordination note from the consumer lock-header rollout (the fleet pip-compile task): this PR edits renovate.json's description but keeps two now-stale bits that are exactly step 5 of that task ("clean up the redundant pip-compile block; keep only Workflows-specific overrides"). Worth folding in here since you're already in this file:

  1. Drop the redundant pip-compile block. renovate-presets/fleet.json has the byte-identical "pip-compile": {"managerFilePatterns": ["/(^|/)requirements\\.lock$/"]} since chore(renovate): P4a — durable lock-regen (fleet pip-compile manager + auto-lock backstop) #2406, and Workflows extends it — so the copy in renovate.json is dead weight. Verified locally that after removing it, renovate --platform=local --dry-run=extract still extracts the lock (depCount 217) via the preset.
  2. The description still says CANARY (do not promote to the fleet preset until proven here) — but it was promoted in chore(renovate): P4a — durable lock-regen (fleet pip-compile manager + auto-lock backstop) #2406. Leaving that on main is contradictory. Suggest replacing the CANARY clause with the proven state + the Workflows-specific rationale (requirements.txt is a lock source here only; consumers' locks source pyproject.toml only, which is why the pip_requirements disable stays out of the preset).

Happy to push this as a clean follow-up PR right after this merges if you'd rather not expand the diff — just flagging so we don't leave the redundant block + contradictory CANARY text on main. (Separately: your --upgrade note is confirmed — uv 0.10.3 strips --upgrade from the recorded lock header, tested directly, so it never reaches Renovate's parser.)

@stranske
stranske merged commit 74f8a6f into main Jun 15, 2026
49 checks passed
@stranske
stranske deleted the chore/retire-maint-51-lockfile-maintenance branch June 15, 2026 11:56
stranske pushed a commit that referenced this pull request Jun 15, 2026
The fleet preset (renovate-presets/fleet.json) has provided the byte-identical
`"pip-compile": {"managerFilePatterns": ["/(^|/)requirements\\.lock$/"]}` block
since #2406, and Workflows extends that preset — so the copy in renovate.json
was dead weight (Renovate merged duplicate manager config to no effect).

Removes the redundant block and refreshes the now-stale description: it still
said "CANARY (do not promote to the fleet preset until proven here)" even though
the manager WAS promoted in #2406. Keeps the lockFileMaintenance / --upgrade
notes from #2413 and the one genuine Workflows-specific override (pip_requirements
disabled for requirements.txt, which is a lock SOURCE here — consumer locks source
pyproject.toml only, which is why that disable is intentionally not in the preset).

Verified: `renovate-config-validator` passes; `renovate --platform=local
--dry-run` still extracts requirements.lock via the preset (depCount 217) with
no error after removal.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
stranske added a commit that referenced this pull request Jun 15, 2026
…2417)

The fleet preset (renovate-presets/fleet.json) has provided the byte-identical
`"pip-compile": {"managerFilePatterns": ["/(^|/)requirements\\.lock$/"]}` block
since #2406, and Workflows extends that preset — so the copy in renovate.json
was dead weight (Renovate merged duplicate manager config to no effect).

Removes the redundant block and refreshes the now-stale description: it still
said "CANARY (do not promote to the fleet preset until proven here)" even though
the manager WAS promoted in #2406. Keeps the lockFileMaintenance / --upgrade
notes from #2413 and the one genuine Workflows-specific override (pip_requirements
disabled for requirements.txt, which is a lock SOURCE here — consumer locks source
pyproject.toml only, which is why that disable is intentionally not in the preset).

Verified: `renovate-config-validator` passes; `renovate --platform=local
--dry-run` still extracts requirements.lock via the preset (depCount 217) with
no error after removal.

Co-authored-by: stranske <tim@stranskemo.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant